虽然字符串简单,但是在生活中的用处确实很广,就像论文查重,文章检索,没有字符串的数据结构和算法是实现不了的
我在这先放上c语言版的char数组,文章的下篇将介绍c++版的(唉,这两天感觉自己特别能得吧了)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <memory.h> //简单点说字符串就是字符数组 //基本运算无非就是长度 比较 回文 模式匹配(查找) //模式匹配和回文我将会单独开文章的,请耐心等等吧 = = //1.求字符串的长度 这里用到strlen函数 //那为什么不用sizeof(str)/sizeof(char) 计算呢? //原因是开辟了1024个长度不一定用满,用sizeof计算呢即为1024,而非字符串长度 int str_length(char *s) { return strlen(s);//直接用strlen求解 } //2.字符串比较 就是挨个比较字符串的字符 //可以用strcmp函数比较 也可以自己手写一个 int str_comparison_system(char *p,char *q)//函数意思为调用系统函数 { //返回1 即p大 0即一样大小 -1即q大 return strcmp(p,q); } int str_comparison_user(char *p,char *q)//这个比较函数为自己写的 { //先求出各自的长度 遍历长度最小的字符串比较,防止越界 //这是作者自己想到的,有什么好的想法欢迎来补充 //如果面试提到的话,自己可以借鉴一下 int lenp=str_length(p); int lenq=str_length(q); int theMin=lenp>lenq?lenq:lenp;//求出最短的长度 for(int i=0;i<theMin;++i) { if(p[i]==q[i]) continue; if(p[i]>q[i]) return 1; if(p[i]<q[i]) return -1; } return lenp>lenq?1:0;//这里的做法是为了防止p的前面与q一致,但是p后面有字符 //EG:abcdefg > abcd } int main() { char str1[1024]="hello world";//c语言中我们用char数组表示字符串 char str2[500]="hello friends"; printf("str1的长度:%d str2的长度:%d\n",str_length(str1), str_length(str2)); //测试一下sizeof的区别 printf("str1的空间:%d\n",sizeof(str1)/sizeof(char));//输出1024 //字符串系统和自己写的比较 printf("系统函数 比较结果:%d\n",str_comparison_system(str1,str2)); printf("自己写函数 比较结果:%d\n",str_comparison_user(str1,str2)); //小福利 送上汇编写的 memory 内存函数的使用 memset(str2,0,sizeof(str2));//内存设置 一般把数组清0用 /* 参数一是你要设置的数组首地址 参数二是字节填充大小 注意int是占8或4个字节全填上1的话 结果就肯定不是1了 参数三是你要填的字节长度 */ puts(str2); memcpy(str2,str1,sizeof(str2));//内存拷贝 // 与strcpy(str2,str1);大同小异 但实际上mem的效率是大于strcpy的 //参数一看就懂了 把str1拷贝给str2 但是最后的参数一定是谁短写谁,否则炸内存 puts(str2); puts(str1); return 0; } c++版的string 数据类型 #include <iostream> #include <string> using namespace std; int main() { string str1="hello world"; string str2="hello friends"; //哎 是不是有疑问了?不用考虑字串的空间大小么? //这里我解释:程序运行实在操作系统的堆上运行的,线程实在栈上运行的 //既然实在堆上运行的,就看你电脑内存了,所以你就可以不用管了 //string 可以用[] 下标访问 // string 的输入两种方式 空格能输入和不能输入 //接收空格的字符串输入 // getline(cin,str1);//意思就是接收一行 回车生效 //不能接收空格的输入 // cin>>str1; //求字符串的长度 string.length() cout<<"str1的长度为"<<str1.length()<<endl; //字符串比较 直接用 <、== 或 > 判断就行了 cout<<(str1>str2)<<endl; //子串 string sub=str1.substr(5,3);//从5的位置截取3个长度 wo cout<<sub<<endl; //查找 时间效率为O(nlog(n)) 原理就是用的模式匹配 int flag=str1.find("lyf");//找不到返回-1 找到返回下标 cout<<flag<<endl; //删除 n个 和 全部 str1.erase(3,4);//从3的位置删除4个 cout<<str1<<endl; str1.clear();//全部删除 cout<<str1<<endl; //加法 连接运算符 cout<<(str1+str2)<<endl; return 0; }